#include <iostream>
#include <algorithm>
using namespace std;

struct stick
{
	int l, w;
};

int n;				  // 木棍数
stick A[20];		  // 木棍数组
int done_time[20]{0}; // 记录一根木棍是何时加工完成的

int least_time()
{
	if (n == 1)
		return 1;

	// 按长度升序（若长度相等，按重量升序）排序
	std::sort(A, A + n, [=](stick a, stick b) {
		return a.l == b.l ? (a.w < b.w) : (a.l < b.l);
	});

	int time = 0;
	done_time[0] = 1;
	for (int i = 1; i < n; i++)
	{
		done_time[i] = 1;
		// 由于数组有序，所以i之前的木棍，长度小于等于i
		// 若i的重量大于j，则它应在j之后1分钟加工
		for (int j = 0; j < i; j++)
			if (A[j].w > A[i].w && done_time[i] == done_time[j])
				done_time[i] = done_time[j] + 1;
	}

	for (int i = 0; i < n; i++)
		time = max(time, done_time[i]);
	return time;
}

int main()
{
	system("chcp 65001");
	cout << "请输入木棍总数：";
	cin >> n;
	cout << "请输入" << n << "个木棍的长度与宽度：" << endl;
	for (int i = 0; i < n; i++)
		cin >> A[i].l >> A[i].w;

	cout << "最短加工时间为：" << least_time() << endl;
	return 0;
}

/*
请输入木棍总数：5
请输入5个木棍的长度与宽度：
4 9
5 2
2 1
3 5
1 4
最短加工时间为：2
*/